import axios from 'axios'
import { userApi } from './user'
import { productApi } from './product'
import { storeApi } from './store'
import { categoryApi } from './category'
import { orderApi } from './order'
import { cartApi } from './cart'
import { aiApi } from './ai'
import { chatApi } from './chat'
import { petApi } from './pet'
import { addressApi } from './address'

// 创建axios实例        
const request = axios.create({
    baseURL: 'http://localhost:8081/api',
    timeout: 5000
})

// 请求拦截器
request.interceptors.request.use(
    config => {
        const token = uni.getStorageSync('token')
        const userId = uni.getStorageSync('userId')
        
        console.log('API请求拦截器:', config.url);
        
        if (token) {
            config.headers['Authorization'] = `Bearer ${token}`
        }
        
        if (userId) {
            config.headers['userId'] = userId
            console.log('添加userId到请求头:', userId);
        }
        
        // 如果是POST请求且有data，确保数据类型正确
        if (config.method === 'post' && config.data) {
            console.log('POST请求数据处理前:', JSON.stringify(config.data));
            
            // 处理数字类型
            if (config.data.addressId) {
                config.data.addressId = parseInt(config.data.addressId);
            }
            
            console.log('POST请求数据处理后:', JSON.stringify(config.data));
        }
        
        return config
    },
    error => {
        console.error('请求拦截器错误:', error);
        return Promise.reject(error)
    }
)

// 响应拦截器
request.interceptors.response.use(
    response => {
        const res = response.data
        if (res.code !== 200) {
            // 处理错误情况
            if (res.code === 401) {
                // token过期，清除token并跳转到登录页
                console.warn('Token过期，需要重新登录')
                uni.removeStorageSync('token')
                uni.showToast({
                    title: '登录已过期，请重新登录',
                    icon: 'none',
                    duration: 2000
                })
                setTimeout(() => {
                    uni.navigateTo({
                        url: '/pages/login/index'
                    })
                }, 1500)
            }
            return Promise.reject(new Error(res.message || '请求失败'))
        }
        return res
    },
    error => {
        console.error('API请求错误:', error)
        // 处理网络错误或服务器错误
        let errorMessage = '网络请求失败'

        if (error.response) {
            // 服务器返回错误状态码
            const status = error.response.status
            console.log(`请求状态码: ${status}`)

            if (status === 401) {
                // 未授权，Token可能无效
                console.warn('Token无效或已过期')
                uni.removeStorageSync('token')
                uni.showToast({
                    title: '登录已过期，请重新登录',
                    icon: 'none',
                    duration: 2000
                })
                setTimeout(() => {
                    uni.navigateTo({
                        url: '/pages/login/index'
                    })
                }, 1500)
                errorMessage = '登录已过期，请重新登录'
            } else if (status === 500) {
                errorMessage = '服务器内部错误'
                console.error('服务器内部错误:', error.response.data)
            } else if (status === 404) {
                errorMessage = '请求的资源不存在'
            }
        } else if (error.request) {
            // 请求已发送但没有收到响应
            errorMessage = '服务器无响应'
            console.warn('请求已发送但没有响应:', error.request)
        }

        uni.showToast({
            title: errorMessage,
            icon: 'none',
            duration: 2000
        })

        return Promise.reject(error)
    }
)

// 创建API对象
const api = {
    userApi,
    productApi,
    categoryApi,
    orderApi,
    cartApi,
    storeApi,
    aiApi,
    chatApi,
    petApi,
    addressApi
}

// 导出request和api
export default request
export { api } 